#include "../include/log_in.h"

// 声明函数

// 登陆的密码验证
Log_in_data log_in(Double_Link_List *list_1, Double_Link_List *list_2)
{
    Log_in_data log_data;
    Double_Node *ptr = NULL;
    memset(&log_data, 0, sizeof(log_data));
    if (NULL == list_1 || NULL == list_2)
    {
        ERRLOG("链表的动态空间为空");
        return log_data;
    }
    // 登陆次数控制
    int num = 3;

    while (1)
    {

        // 用户输入账号以及密码
        printf("输入你的账号:");
        scanf("%s", log_data.name);
        printf("输入你的密码:");
        scanf("%s", log_data.password);

        if (NULL != (ptr = find_double_node_name(list_1, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                printf("登陆成功\n");
                log_data = ptr->data;
                return log_data;
            }
        }
        if (NULL != (ptr = find_double_node_name(list_2, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                printf("登陆成功\n");
                log_data = ptr->data;
                int num_1 = 0;
                char dom_list_name;
                char buf[128];

                printf("1:退出\t 2:修改权限\t 3:帐号\t4:密码");
                scanf("%d", &num_1);
                switch (num_1)
                {
                case 1:
                    break;
                case 2:
                    printf("你要将谁设为root：\t");
                    scanf("%s", &dom_list_name);
                    change_permission(list_1, list_2, dom_list_name);
                    break;
                case 3:
                    printf("请输入你的账号");
                    scanf("%s", buf);
                    strcpy(ptr->data.name, buf);
                    printf("账号修改成功 账号为 %s\n", buf);
                    break;
                case 4:
                    printf("请输入你的密码");
                    scanf("%s", buf);
                    if (!strcmp(ptr->data.password, buf))
                    {
                        printf("你个笨蛋 新密码 不能和旧密码相同\n");
                    }
                    strcpy(ptr->data.password, buf);
                    printf("密码修改成功 密码为 %s\n", buf);
                    break;
                default:
                    break;
                }
                return log_data;
            }
        }
        num--;
        if (0 == num)
        {
            printf("三次输入错误 请稍后再试\n");
            exit(-1); // 退出进程
        }
    }
}

// 注册
void reg(Double_Link_List *list)
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }
    Log_in_data log_data;
    char password[128];
    log_data.id = 0;
    printf("请输入你 账号:\n");
    scanf("%s", log_data.name);

    printf("请输入你的密码:\n");
    scanf("%s", log_data.password);

    printf("请再次输入你的密码:\n");
    scanf("%s", password);

    if (strcmp(password, log_data.password))
    {
        printf("两次密码输入不相同 请重新运行本程序\n");
        exit(-1);
    }

    printf("恭喜你 注册成功\n");

    // 插入到链表

    insert_double_node(list, log_data, 1);

    // 写入到文件
    F_print(list, "2_dom_data.txt");
}

void root_amend(Double_Link_List *list, char *name)
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }

    // find_double_node_name

    Double_Node *ptr = find_double_node_name(list, name);
    int num = 0;
    char buf[128];
    printf("请输入你需要修改的信息 1 账号 2 密码 3 升级权限:\n");
    scanf("%d", &num);

    switch (num)
    {
    case 1:
        printf("请输入你的账号");
        scanf("%s", buf);
        strcpy(ptr->data.name, buf);
        printf("账号修改成功 账号为 %s\n", buf);
        break;
    case 2:
        printf("请输入你的密码");
        scanf("%s", buf);
        if (!strcmp(ptr->data.password, buf))
        {
            printf("你个笨蛋 新密码 不能和旧密码相同\n");
            return;
        }
        strcpy(ptr->data.password, buf);
        printf("密码修改成功 密码为 %s\n", buf);
        break;
    case 3:
        ptr->data.id = 1;
        printf("恭喜 \"%s\" 用户 成功升级为 svip\n", ptr->data.name);
        break;
    default:
        break;
    }
}